package com.comba.nutz.boot.starter.datasource;

import java.util.ArrayList;
import java.util.List;

/**
 * @author george
 */
public class DataSourceContextHolder {

    /**
     * 当使用ThreadLocal维护变量时，ThreadLocal为每个使用该变量的线程提供独立的变量副本，
     * 所以每一个线程都可以独立地改变自己的副本，而不会影响其它线程所对应的副本。
     */
    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();

    /**
     * 管理所有的数据源id; 主要是为了判断数据源是否存在;
     */
    private static List<String> types = new ArrayList<>();

    public static void addDataSourceType(String type) {
        types.add(type);
    }

    public static void clearDataSourceType() {
        CONTEXT_HOLDER.remove();
    }

    /**
     * 判断指定DataSrouce当前是否存在
     *
     * @param type
     * @return
     * @author SHANHY
     * @create 2016年1月24日
     */
    public static boolean containsDataSource(String type) {
        return types.contains(type);
    }

    public static String getDataSourceType() {
        return CONTEXT_HOLDER.get();
    }

    /**
     * 使用setDataSourceType设置当前的
     *
     * @param type
     */
    public static void setDataSourceType(String type) {
        CONTEXT_HOLDER.set(type);
    }

}
